//此云函数用于每天早上对此日两个时间段的签到状况进行初始写入
const cloud = require('wx-server-sdk')
cloud.init({ env: 'sm-arete-5g1a0i6r9304cc90' }) // 使用当前云环境
// 获取数据库对象
const db = cloud.database();
var specialinavailable = true;

exports.main = async (event, context) => {

  //获取时间
  const getserverDate=await cloud.callFunction({
      name: 'get-time',
      data: {},
  });
  time=new Date(getserverDate.result);
  const y=`${time.getFullYear()}`;
  if (time.getMonth()<9) {
    m='0'+`${time.getMonth()+1}`;
  } else{
    m=`${time.getMonth()+1}`;
  }
  if (time.getDate()<10) {
    d='0'+`${time.getDate()}`;
  } else{
    d=`${time.getDate()}`;
  }
  if (time.getDate()-1<10) {
    dy='0'+`${time.getDate()-1}`;
  } else{
    dy=`${time.getDate()-1}`;
  }
  const w=time.getDay()
  
  
  
  //添加今日字段
  const checkin1 = db.collection("checkin1");
  let $ = db.command.aggregate
  checkin1.aggregate().addFields({ //添加新字段
    totalPrice:$.multiply([y+m+d+'A'])
  })
  let promises = [];


  //写入特殊
  /* 通过excel写入时纯数字会被认为非文本从而导致操作不便，故暂封此功能，后续可以通过admin权限在小程序直接写入时可以启用
  promises.push(db.collection("special").where({_id:parseInt(y+m+d)}).get().then( res => {
    specialinavailable=false;
    if (res.data[0].op === 'off'){
      try {
        checkin1.where({
        }).update({
           data: {
            [[y+m+d+'A']] : '#C3C3C3',
            [[y+m+d+'P']] : '#C3C3C3'
          },
        })
      } catch(e) {
        console.error(e)
      }
    }else if (res.data[0].op === 'on'){
      try {
        checkin1.where({
        }).update({
           data: {
            [[y+m+d+'A']] : '#FFFFFF',
            [[y+m+d+'P']] : '#FFFFFF'
          },
        })
      } catch(e) {
        console.error(e)
      }
    }
  })) */
  promises.push(db.collection("special").where({_id:y+m+d+'A'}).get().then( res => {
    if (res.data[0].op === 'off'){
      specialinavailable=false;
      try {
        checkin1.where({
        }).update({
           data: {
            [[y+m+d+'A']] : '#C3C3C3'
          },
        })
      } catch(e) {
        console.error(e)
      }
    }else if (res.data[0].op === 'on'){
      try {
        checkin1.where({
        }).update({
           data: {
            [[y+m+d+'A']] : '#FFFFFF'
          },
        })
      } catch(e) {
        console.error(e)
      }
    }
  }))
  promises.push(db.collection("special").where({_id:y+m+d+'P'}).get().then( res => {
    specialinavailable=false;
    if (res.data[0].op === 'off'){
      try {
        checkin1.where({
        }).update({
           data: {
            [[y+m+d+'P']] : '#C3C3C3'
          },
        })
      } catch(e) {
        console.error(e)
      }
    }else if (res.data[0].op === 'on'){
      try {
        checkin1.where({
        }).update({
           data: {
            [[y+m+d+'P']] : '#FFFFFF'
          },
        })
      } catch(e) {
        console.error(e)
      }
    }
  }))
  
  //初始写入上午
  promises.push(db.collection("classtime1").where({_id:`${w}`+'A'}).get().then( res => {
    console.log('1',specialinavailable);
    if (specialinavailable){
      console.log('2',specialinavailable);
      if (res.data[0].startime == null || res.data[0].startime === ''){
        try {
          checkin1.where({
          }).update({
             data: {
              [[y+m+d+'A']] : '#C3C3C3'
            },
          })
        } catch(e) {
          console.error(e)
        }
      }else{
        try {
          checkin1.where({
          }).update({
             data: {
              [[y+m+d+'A']] : '#FFFFFF'
            },
          })
        } catch(e) {
          console.error(e)
        }
      }
    }
  }))
  //初次写入下午
  promises.push(db.collection("classtime1").where({_id:`${w}`+'P'}).get().then( res => {
    if (specialinavailable){
      if (res.data[0].startime == null || res.data[0].startime === ''){
        try {
          checkin1.where({
          }).update({
             data: {
              [[y+m+d+'P']] : '#C3C3C3'
            },
          })
        } catch(e) {
          console.error(e)
        }
      }else{
        try {
          checkin1.where({
          }).update({
             data: {
              [[y+m+d+'P']] : '#FFFFFF'
            },
          })
        } catch(e) {
          console.error(e)
        }
      }
    }
  }))


  Promise.all(promises).then(()=>{
    console.log('chenggong');
    //对昨天考勤进行补全写入
    db.collection("checkin1").where({[y+m+dy+'A']:'#FFFFFF'}).get().then( res => {
      console.log(res);
      if (res.data.length != 0){
        tphone = res.data[0].phone;
        const n=tphone.length;
        let promise2=[];
        for (i=0;i<n;i++) {
          promise2.push(checkin1.where({_id:parseInt(tphone[i])
          }).update({
            data: {
              [[y+m+d+'A']] : '#99D9EA'
            },
          }))
        } 
      }
      Promise.all(promises2).then(() => {
      }).catch((e) => {
        console.error(e);
      })
    })
    //写入上午请假
    db.collection("leave").where({_id:y+m+d+'A'}).get().then( res => {
      if (res.data.length != 0){
        tphone = res.data[0].phone;
        const n=tphone.length;
        let promise2=[];
        for (i=0;i<n;i++) {
          promise2.push(checkin1.where({_id:parseInt(tphone[i])
          }).update({
            data: {
              [[y+m+d+'A']] : '#99D9EA'
            },
          }))
        } 
      }
      Promise.all(promises2).then(() => {
      }).catch((e) => {
        console.error(e);
      })
    })
    //db.collection("leave").where({_id:y+m+d+'A'}).remove()
    //写入下午请假
    db.collection("leave").where({_id:y+m+d+'P'}).get().then( res => {
      if (res.data.length != 0){
        tphone2 = res.data[0].phone;
        const n2=tphone2.length;
        let promise3=[];
        for (i=0;i<n2;i++) {
          promise3.push(checkin1.where({_id:parseInt(tphone2[i])
          }).update({
            data: {
              [[y+m+d+'P']] : '#99D9EA'
            },
          }))
        }
        Promise.all(promises3).then(() => {
        }).catch((e) => {
          console.error(e);
        })
      }
    })
    //db.collection("leave").where({_id:y+m+d+'P'}).remove()
  })
}